package org.lc.cmd;

import org.jline.utils.AttributedString;

/**
 * 命令行数据传输桥
 * 负责客户端和服务端的数据传输
 */
public interface CmdDataBridge {
    /*
    TODO \
    1、去除CommandRegistry
    2、网络传递自动补全
    3、测试特殊字符能否通过http GET传递
     */

    /**
     * 执行完成一段命令，客户端发送命令语句
     * 由客户端调用，服务端同步执行完成后返回
     *
     * @param line 命令行
     */
    void sendCmdLine(String line);

    /**
     * 读取一行
     * 由服务端调用，客户端同步执行完成后返回
     *
     * @param prompt 提示语句
     * @return 读取的结果
     */
    String readLine(String prompt);

    /**
     * 写入一个字符串
     * 由服务端调用，客户端同步在终端显示之后返回
     *
     * @param str
     * @param above
     */
    void write(AttributedString str, boolean above);

    /**
     * 通知客户端需要关闭客户端
     * 由服务端调用，无需等待客户端返回
     * 注：客户端关闭自己不需要调用方法
     */
    void closeClient();

    /**
     * 通知服务端需要关闭服务端
     * 由客户端调用，无需等待服务端返回
     * 注：服务端关闭自己不需要调用方法
     */
    void closeServer();
}
